
用弹出式窗口来呈现的一个菜单。
这个菜单对象,实现的是一个典型的上下文菜单,并且支持子菜单。它继承了 WMenu ,同时也继承了其中的大部分接口。
在最初被创建时,这个菜单是处于隐藏状态的,直到妳调用 popup() 或 exec() 才会显示出来。然后,这个菜单会保持可见状态,直到用户选择了某个菜单项,或者取消掉这个菜单(按Escape键或者点击菜单之外的地方)。
在它的实现中,假设JavaScript 是可用的,这样才能将菜单放置到鼠标当前的位置,并且针对当前选中的菜单项提供视觉反馈。
对于 WDialog ,可通过两种方式来使用菜单。最简单的方式就是使用众多的同步 exec() 方法中的一个,这样会启动一个重入(reentrant)的事件循环,并且等待,直到用户取消掉这个菜单(按Escape键或者点击菜单之外的地方),或者选择一个菜单项。
或者,妳可以使用众多 popup() 方法中的一个来显示出菜单,并且连接到 triggered 信号,在相应的信号槽中读取结果( getResult() )。
妳可以采用多种方式来对某个菜单项的选择事件作出响应:
•.可使用该 WMenuItem 自身来区分出被选择的动作,比如说特化这个类,或者简单地使用 WMenuItem#setData() 来给它绑定自定义数据。
•.妳可以给每个菜单项的 WMenuItem#triggered() 信号绑定一个单独的方法。
使用示例:
{
@code
// 创建一个拥有若干菜单项的菜单
WPopupMenu popup = new WPopupMenu();
popup.addItem("icons/item1.gif", "Item 1");
popup.addItem("Item 2").setCheckable(true);
popup.addItem("Item 3");
popup.addSeparator();
popup.addItem("Item 4");
popup.addSeparator();
popup.addItem("Item 5");
popup.addItem("Item 6");
popup.addSeparator();
WPopupMenu subMenu = new WPopupMenu();
subMenu.addItem("Sub Item 1");
subMenu.addItem("Sub Item 2");
popup.addMenu("Item 7", subMenu);
WMenuItem item = popup.exec(event);
if (item != null) {
// ... 在这里做相关的操作。
}
}
WPopupMenu 的截图:
WPopupMenu示例(默认主题)
WPopupMenu示例(光鲜主题(polished))
参考:
古画
HxLauncher: Launch Android applications by voice commands